The Digital Filter is originally developed in a field of electrical engineering as a kind of low/high pass filters. The Digital Filter Initialization (DFI) is a technique to remove gravity wave noise excited by the imbalance between mass and wind field in the initial condition during the the forecast. It is not really an initialization since the method does not provide "initialized analysis", but work as a supression of gravity wave noise during the forward integration of the model. Please see Lynch and Huang (1992, MWR) for theoretical details. When variational analysis became more popular, DFI and other initialization techniques became unpopular because of the analysis method incorporates balance as a constraint and the resulting anlaysis is dynamically balanced. There is a revival of DFI due to the popularity of analysis based on Ensemble Kalman Filters (EnKF), since it does not (yet) incorporate dynamical balance as a constraint and resulting analysis may not be well balanced.
DFI option has been implemented in GSM (since Oct 3, 2008).
Please follow the instruction below.
- Install the latest gsm (or gdas) with the ordinary setting.
- In gsm (or gdas), define DFI option in def/legacy.h and undefine NFDR option in def/misc.h.
- Recompile gsm. ( cd gsm ; configure-model ; make clean ; make )
- Modify runscr/fcstparm. Set con(3) for your DFI window (e.g. 6.0).
- Modify gsm (gdas) script to satisfy INTSIG=INTSFC=INTPOST=con(3). (Otherwise, forecast rewinding is not properly working)
- Run the gsm script.
If you run 24 hour forecast (ENDHOUR=24) with 6-h window DFI (con(3)=6), the fcst goes as follows:
- at 3h, sfd.ft03 saved.
- at 6h, prognostics updated by DFI. Clock rewound to 3h. sfd.ft03 reloaded. sig.ft03, sfc.ft03, pgb.ft03, flx.ft03 outputted.
- 3h-21h ordinary forecast (output at ft09, 15, and 21)
Note that the forecast won't go to ft24 because of the rewound 3 hours. (total simulation period is 24 hours.)
Old instruction (until 2008/10/03)
In GSM, you can have DFI by easy steps. (RSM has not been checked)
- define DFI and undefine NFDR in your define.h.
- comment out a line with "limlow=limlow-nummax" in src/fcst/gsmini.F
- add dfini.o and mltflx.o in somewhere in src/fcst/Makefile
- $ cd gsm (gdas) ; make clean ; make
- change con(3)=12 in gruns/runscr/fcstparm.
- edit gsm script, ENDHOUR, to be same as con(3).
Commitment to CVS will be done momentarily.
Written by Kei (2008/10/02)